跳到主要内容

openssl 生成 CA 证书

CA 的作用

1)颁发证书,颁发证书其实就是 使用 CA 的私钥对证书请求签名文件进行签名;

2)颁发的证书浏览器要信任,浏览器只需要用CA的公钥进行验签成功就表示这个证书是合法可信的,这就需要浏览器内置CA的公钥,也就是内置CA的证书。一般来说,操作系统都会内置权威CA的证书,有的浏览器会使用操作系统内置的CA证书列表,有的浏览器则自己维护的CA证书列表,比如Firefox。

20220602143606

CA 使用的具体流程

20220602143842

证书 = 公钥(服务方生成密码对中的公钥)+ 申请者与颁发者信息 + 签名(用CA机构生成的密码对的私钥进行签名);

即便有人截取服务器A证书,再发给客户端,想冒充服务器A,也无法实现。因为证书和url的域名是绑定的。

什么是 x509 证书链

X.509 是用于的标准格式 公钥证书,是将加密密钥对与网站,个人或组织等身份安全地关联的数字文档。

x509证书一般会用到三类文件,key,csr,crt。

  • key 是私用密钥,openssl 格式,通常是 rsa 算法。
  • csr 是证书请求文件,用于申请证书。在制作csr文件的时候,必须使用自己的私钥来签署申请,还可以设定一个密钥。
  • crt 是 CA 认证后的证书文件(windows 下面的 csr,其实是 crt),签署人用自己的 key 给你签署的凭证。

证书类别

  • 根证书:生成服务器证书,客户端证书的基础。自签名。
  • 服务器证书:由根证书签发。配置在服务器上。
  • 客户端证书:由根证书签发。配置在服务器上,并发送给客户,让客户安装在浏览器里。

首先要有一个 CA 根证书,然后 用 CA 根证书来签发用户证书

用户进行证书申请:一般先生成一个私钥,然后用私钥生成证书请求(证书请求里应含有公钥信息),再利用证书服务器的 CA 根证书来签发证书。

openssl中有如下后缀名的文件

.key 格式:私有的密钥 .csr 格式:证书签名请求(证书请求文件),含有公钥信息,certificate signing request 的缩写 .crt 格式:证书文件,certificate 的缩写 .crl 格式:证书吊销列表,Certificate Revocation List 的缩写 .pem 格式:用于导出,导入证书时候的证书的格式,有证书开头,结尾的格式 .p12 或者 “.pfx” : 用于实现存储许多加密对象在一个单独的文件中。通常用它来打包一个私钥及有关的 X.509 证书,或者打包信任链的全部项目。

CA 根证书的生成步骤

生成永久证书

sudo openssl genpkey -algorithm RSA -out ca.key
# 设置为36500天,以表示永久
sudo openssl req -x509 -new -key ca.key -out ca.crt -days 36500

# 配置CA证书的权限以确保只有合适的用户可以访问它:
sudo chmod 400 ca.key
sudo chmod 444 ca.crt

# 编码为 base64
base64 -w 0 -i ca.crt
base64 -w 0 -i ca.key

# Ubuntu 安装证书
sudo cp ca.crt /usr/local/share/ca-certificates/
sudo update-ca-certificates

References